public class code4 {
    public int numberOfArithmeticSlices(int[] nums) {
        int n = nums.length;

        int[][] dp = new int[n][n];

        Map<Long,List<Integer>> hash = new HashMap<>();
        //把<元素，下标数组>存入hash
        for(int i=0;i<n;i++) {
            long tmp = nums[i];
            if(!hash.containsKey(tmp)) {//看以前是否创建了对应的下标数组
                hash.put(tmp,new ArrayList<>());
            }
            hash.get(tmp).add(i);//将下标放入下标数组
        }

        int sum=0;
        for(int j=2;j<n;j++) {
            for(int i=1;i<j;i++) {
                long a = 2L*nums[i]-nums[j];
                if(hash.containsKey(a)) {//看第一个数a是否存在
                    for(int k:hash.get(a)) {
                        if(k<i) dp[i][j]+=dp[k][i]+1;
                        else break;//可能比i大的k有多个
                    }
                }
                sum+=dp[i][j];
            }
        }
        return sum;
    }
}
